/*
 * Copyright (c) 2019 Winner Microelectronics Co., Ltd.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2022-08-21     yuanzihao    first implementation
 */

#include <rtthread.h>
#include <rtdevice.h>
#include <fal.h>
#include <drv_ch423.h>
#include <ext_gpio_control_thread.h>
#include <ulog.h>

#define THREAD_PRIORITY 25
#define THREAD_STACK_SIZE 512
#define THREAD_TIMESLICE 5

ch423_ext_gpio_control_reg_t ext_gpio_control_reg;

static void set_ext_gpio_control_reg_to_default(ch423_ext_gpio_control_reg_t *ext_gpio_control_reg)
{
    ext_gpio_control_reg->ch423_io_port.io_port = 0;
    ext_gpio_control_reg->ch423_oc_port.oc_port = 0;
}
void set_left_nixie_cube_dot(rt_bool_t dot) // 0,1,2,3,4,5,6,7,8,9,Dot(10)
{
    if (dot)
    {
        ext_gpio_control_reg.ch423_oc_port.state.OC7 = 1; // S1_D
    }
    else
    {
        ext_gpio_control_reg.ch423_oc_port.state.OC7 = 0; // S1_D
    }
}

void set_left_nixie_cube_number(uint8_t left_number) // 0,1,2,3,4,5,6,7,8,9,Dot(10)
{
    switch (left_number)
    {
    case 0:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 1; // S1_0
        break;
    }
    case 1:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 1; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    case 2:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 1; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    case 3:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 1; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    case 4:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 1; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    case 5:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 1; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    case 6:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 1; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    case 7:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 1; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    case 8:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 1; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    case 9:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 1; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    case 10:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO6 = 0; // S1_9
        ext_gpio_control_reg.ch423_io_port.state.IO7 = 0; // S1_8
        ext_gpio_control_reg.ch423_oc_port.state.OC0 = 0; // S1_7
        ext_gpio_control_reg.ch423_oc_port.state.OC1 = 0; // S1_6
        ext_gpio_control_reg.ch423_oc_port.state.OC2 = 0; // S1_5
        ext_gpio_control_reg.ch423_oc_port.state.OC3 = 0; // S1_4
        ext_gpio_control_reg.ch423_oc_port.state.OC4 = 0; // S1_3
        ext_gpio_control_reg.ch423_oc_port.state.OC5 = 0; // S1_2
        ext_gpio_control_reg.ch423_oc_port.state.OC6 = 0; // S1_1
        ext_gpio_control_reg.ch423_io_port.state.IO5 = 0; // S1_0
        break;
    }
    default:
        break;
    }
}

void set_right_nixie_cube_dot(rt_bool_t dot)
{
    if (dot)
    {
        ext_gpio_control_reg.ch423_oc_port.state.OC8 = 1; // S2_D
    }
    else
    {
        ext_gpio_control_reg.ch423_oc_port.state.OC8 = 0; // S2_D
    }
}

void set_right_nixie_cube_number(uint8_t right_number) // 0,1,2,3,4,5,6,7,8,9,Dot(10)
{
    switch (right_number)
    {
    case 0:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 1;  // S2_0
        break;
    }
    case 1:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 1;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    case 2:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 1; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    case 3:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 1; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    case 4:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 1; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    case 5:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 1; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    case 6:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 1; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    case 7:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 1; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    case 8:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 1;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    case 9:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 1;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    case 10:
    {
        ext_gpio_control_reg.ch423_io_port.state.IO1 = 0;  // S2_9
        ext_gpio_control_reg.ch423_io_port.state.IO0 = 0;  // S2_8
        ext_gpio_control_reg.ch423_oc_port.state.OC15 = 0; // S2_7
        ext_gpio_control_reg.ch423_oc_port.state.OC14 = 0; // S2_6
        ext_gpio_control_reg.ch423_oc_port.state.OC13 = 0; // S2_5
        ext_gpio_control_reg.ch423_oc_port.state.OC12 = 0; // S2_4
        ext_gpio_control_reg.ch423_oc_port.state.OC11 = 0; // S2_3
        ext_gpio_control_reg.ch423_oc_port.state.OC10 = 0; // S2_2
        ext_gpio_control_reg.ch423_oc_port.state.OC9 = 0;  // S2_1
        ext_gpio_control_reg.ch423_io_port.state.IO2 = 0;  // S2_0
        break;
    }
    default:
        break;
    }
}

void set_speech_module_uart_to_mcu(void)
{
    ext_gpio_control_reg.ch423_io_port.state.IO4 = 0;
    LOG_I("IO4:%d\r", ext_gpio_control_reg.ch423_io_port.state.IO4);
}
void set_speech_module_uart_to_usb2ttl(void)
{
    ext_gpio_control_reg.ch423_io_port.state.IO4 = 1;
    LOG_I("IO4:%d\r", ext_gpio_control_reg.ch423_io_port.state.IO4);
}
void set_speech_module_power_on(void)
{
    ext_gpio_control_reg.ch423_io_port.state.IO3 = 1;
    LOG_I("IO3:%d\r", ext_gpio_control_reg.ch423_io_port.state.IO3);
}
void set_speech_module_power_off(void)
{
    ext_gpio_control_reg.ch423_io_port.state.IO3 = 0;
    LOG_I("IO3:%d\r", ext_gpio_control_reg.ch423_io_port.state.IO3);
}

ALIGN(RT_ALIGN_SIZE)
static char ext_gpio_control_thread_stack[1024];
static struct rt_thread ext_gpio_control_thread;

static rt_timer_t ext_gpio_control_timer;
RT_USED static uint8_t temp_count = 0;

/* 线程 ext_gpio_control_thread 入口 */
static void ext_gpio_control_entry(void *param)
{
    set_ext_gpio_control_reg_to_default(&ext_gpio_control_reg);
    while (1)
    {
        rt_thread_mdelay(200);
        //		set_left_nixie_cube_number(temp_count);
        //		set_right_nixie_cube_number(temp_count);
        //		temp_count++;
        //		if(temp_count == 11)
        //		{
        //			temp_count = 0;
        //		}
    }
}

void open_nixie_tube(void)
{
    rt_timer_start(ext_gpio_control_timer);
}

void shut_nixie_tube(void)
{
    rt_timer_stop(ext_gpio_control_timer);
    rt_thread_mdelay(100);
    set_left_nixie_cube_number(10);
    set_right_nixie_cube_number(10);
    set_right_nixie_cube_dot(0);
    set_left_nixie_cube_dot(0);
    bsp_CH423_WriteOC(ext_gpio_control_reg.ch423_oc_port.oc_port);
    bsp_CH423_WriteIO(ext_gpio_control_reg.ch423_io_port.io_port);
}
/* 定时器 超时函数 */
static void ext_gpio_control_refresh(void *parameter)
{
    bsp_CH423_WriteOC(ext_gpio_control_reg.ch423_oc_port.oc_port);
    bsp_CH423_WriteIO(ext_gpio_control_reg.ch423_io_port.io_port);
}
int ext_gpio_control_thread_init(void)
{
    /* 创建定时器 1  周期定时器 */
    ext_gpio_control_timer = rt_timer_create("gpio_refresh_timer", ext_gpio_control_refresh,
                                             RT_NULL, 10,
                                             RT_TIMER_FLAG_PERIODIC);

    /* 启动定时器 1 */
    if (ext_gpio_control_timer != RT_NULL)
        rt_timer_start(ext_gpio_control_timer);
    /* 初始化线程 2，名称是 thread2，入口是 thread2_entry */
    rt_thread_init(&ext_gpio_control_thread,
                   "ext_gpio_control_thread",
                   ext_gpio_control_entry,
                   RT_NULL,
                   &ext_gpio_control_thread_stack[0],
                   sizeof(ext_gpio_control_thread_stack),
                   THREAD_PRIORITY - 1, THREAD_TIMESLICE);
    rt_thread_startup(&ext_gpio_control_thread);

    return 0;
}
INIT_APP_EXPORT(ext_gpio_control_thread_init);
